using System;
using UnityEngine;
using UnityEngine.Events;

//宝箱（Chest）的库存管理器，同时也是一个可交互物体，实现了 IInteractable 接口。
[RequireComponent(typeof(UniqueID))]
public class ChestInventory : InventoryHolder, IInteractable // 继承自 InventoryHolder，实现 IInteractable 接口
{
    public UnityAction<IInteractable> OnInteractionComplete { get; set; } // 当交互完成时触发的事件

    protected override void Awake()
    {
        base.Awake();
        SaveLoad.OnLoadGame += LoadInventory;// 注册读取游戏数据的事件
    }

    private void Start()
    {
        // 创建一个 ChestSaveData 对象并将其添加到 SaveGameManager 的 chestDictionary 中
        var chestSaveData = new InventorySaveData(inventorySystem, transform.position, transform.rotation);
        SaveGameManager.data.chestDictionary.Add(GetComponent<UniqueID>().ID, chestSaveData);
    }
        
    // 读取游戏数据的回调函数
    protected override void LoadInventory(SaveData data)
    {
        // 判断该宝箱是否在读取的游戏数据中
        if (data.chestDictionary.TryGetValue(GetComponent<UniqueID>().ID, out InventorySaveData chestData))
        {
            // 如果存在该宝箱的游戏数据，则将其读取出来
            this.inventorySystem = chestData.invSystem;
            this.transform.position = chestData.position;
            this.transform.rotation = chestData.rotation;
        }
    }

    // 处理与 Interactor 之间的交互操作
    public void Interact(Interactor interactor, out bool interactSuccessful)
    {
        // 调用 DynamicInventoryDisplayRequested 事件，将自身的 InventorySystem 传递给 DynamicInventoryDisplay
        OnDynamicInventoryDisplayRequested?.Invoke(PrimaryInventorySystem, 0);
        interactSuccessful = true; // 设置交互成功的标志位为 true
    }

    // 结束交互
    public void EndInteraction()
    {
        // 触发 OnInteractionComplete 事件
        OnInteractionComplete?.Invoke(this);
    }
}